/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : MyComputer
 * @DateTime : 2024/3/23 9:47
 */


//小美拿到了一个排列，其中初始所有元素都是红色，但有一些元素被染成了白色。
//小美每次操作可以选择交换任意两个红色元素的位置。
//她希望操作尽可能少的次数使得数组变成非降序，你能帮帮她吗？
//排列是指:一个长度为n的数组，其中1到n每个元素恰好出现了一次。
//
//输入描述
//  第一行输入一个正整数n，代表数组的长度。
//  第二行输入n个正整数ai，代表数组的元素。
//  第三行输入一个长度为n的字符串，代表数组元素的染色情况。
//  第i个字符为'R'代表第i个元素被染成红色，为"W"代表初始的白色,
//  1≤ n ≤10^5
//  1≤ ai ≤n
//输出描述
//  如果无法完成排序，请输出-1.否则输出一个整数，代表操作的最小次数。
//
//示例1
//输入
//4
//1 3 2 4
//WRRW
//输出
//1
//说明
//  第一次操作，交换2和3，数组变成[1,2,3,4]

#include <string>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    int arr[n];
    bool isRed[n];

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    char s[n];
    scanf("%s", s);

    int res = 0;
    for (int i = 0; i < n; ++i) {
        if (arr[i] == i + 1) continue;
        if (s[arr[i] - 1] == 'W' || s[i] == 'W') {
            res = -1;
            break;
        }
        int tmp = arr[i];
        arr[i] = arr[tmp - 1];
        arr[tmp - 1] = tmp;
        res++;
        i--;
    }

    if (res == -1) puts("-1");
    else printf("%d", res);

    return 0;
}
//4
//1 3 2 4
//WRRW